package com.wgy.Day28异常.异常的处理方法;

import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * Created by pc on 2020/11/26 1:03
 * Description: LearningJava
 */
/*
异常处理的五个关键字: try...catch(捕获异常),finally,throw(抛出异常),throws(声明异常)
Throws关键字:异常处理的第一步,交给别人处理
        作用:当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象
            可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理--->中断处理

    使用格式:在方法声明时使用
           修饰符 返回值类型 方法名称(参数列表) throws AAAException,BBBException...{
           throw new  AAAException();
           throw new  BBBException();
            ...
           }

  注意事项: 1.throws关键字必须写在方法声明处
          2.throw关键字后边声明的异常必须是Exception或者Exception的子类
          3.方法内部如果抛出了多个异常,那么throws后边必须也声明对应的多个异常
            如果抛出了多个异常对象有父子类关系的,那么直接声明父类异常即可
          4.调用一个声明抛出异常的方法,我们就必须处理声明的异常
            要么继续使用throws声明抛出,要么交给方法的调用者处理,最终交给JVM
            要么try...catch自己处理异常
          5.throws声明处理的异常是有缺陷的,缺陷就是真的有异常的话出现的话,程序就中断了, 异常后续的代码无法执行
注意:
   FileNotFoundException:是一个编译异常,抛出了编译异常,就必须处理这个异常
   可以使用throws继续声明抛出这个异常
*/

public class Demo05Throws {
    public static void main(String[] args) throws FileNotFoundException,IOException {
       // readFile("c:\\a.txt");
       // readFile("d:\\a.txt");
        readFile("c:\\a.tx");

    }


    //定义一个方法,对传递文件的路径进行合法性判断
    // 如果抛出了多个异常对象有父子类关系的,那么直接声明父类异常即可
   // FileNotFoundException extends IOException extends Exception
    public static void readFile(String fileName) throws /*FileNotFoundException,*/IOException {

        //如果路径不是"c:\\a.txt",那么我们就抛出文件找不到异常对象,告知方法的调用者
        if ( !fileName.equals("c:\\a.txt")){
            throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");
        }

        //如果文件的后缀名不是.txt结尾,那么我们就抛出IO异常对象,告知方法的调用者,文件的后缀名不对
        if ( !fileName.endsWith(".txt")){
            throw new IOException("传递的文件的后缀名不对");
        }

        System.out.println("路径一致,读取文件");
    }
}
